﻿//-----------------------------------------------------------------------
// <copyright file="IRuleObject.cs" company="tuliprules.org">
//     Copyright (c) 2010 tuplelister, tuliprules.org.
// </copyright>
// <summary>This is the IRuleObject interface.</summary>
//-----------------------------------------------------------------------

namespace Tulip.Rules
{
    using System;

    /// <summary>
    /// Represents an rule object (a rule set or rule).
    /// </summary>
    public interface IRuleObject
    {
        /// <summary>
        /// Gets a URI that can be used as a type specifer for the rule set.
        /// </summary>
        /// <value>
        /// The build component of the version number.
        /// </value>
        Uri Type
        {
            get;
        }

        /// <summary>
        /// Gets or sets the build component of the version number.
        /// </summary>
        /// <value>
        /// The build component of the version number.
        /// </value>
        int Build
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the major version component of the version number.
        /// </summary>
        /// <value>
        /// The major version component of the version number.
        /// </value>
        int MajorVersion
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the minor version component of the version number.
        /// </summary>
        /// <value>
        /// The minor version component of the version number.
        /// </value>
        int MinorVersion
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the name of the rule.
        /// </summary>
        /// <value>
        /// The name of the rule.
        /// </value>
        string Name
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the revision component of the version number.
        /// </summary>
        /// <value>
        /// The revision component of the version number.
        /// </value>
        int Revision
        {
            get;
            set;
        }

        /// <summary>
        /// Gets the version number.
        /// </summary>
        /// <value>
        /// The version number.
        /// </value>
        Version Version
        {
            get;
        }
    }
}
